const babel = require('@babel/core'); // babel的编译器，核心api都在这里，比如transform和parse
const path = require('path');

function loader(inputSource) {
  const { getOptions } = require('loader-utils');
  // 1获取插件webpack中配置项
  let options = getOptions(this) || {}; // this上下文对象context，默认为空，但是在loader-runner执行过程中会给context增加属性和方法
  // 2设置filename
  options.filename = path.basename(this.resourcePath); // index.js
  //code转换后的es5代码,map转换后的代码到转换前的代码的映射 ast转换后的抽象语法树
  let { code, ast, map } = babel.transform(inputSource, options)
  // return inputSource
  //loader可以返回一个值 ,也可以返回多个值
  //返回一个值的话可以return 返回多个值的话,必须 this.callback(err,传递给下一个loader的参数)
  //callback是loader-runner提供的一个方法
  //this默认是context,默认是空对象,但是在loader-runner执行的过会给context增加很多的方法和属性
  return this.callback(null, code, map, ast);
}
module.exports = loader